package com.mxgraph.shape;

import com.mxgraph.canvas.mxGraphics2DCanvas;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxUtils;
import com.mxgraph.view.mxCellState;

import java.awt.*;

/**
 * The type Mx hexagon shape.
 */
public class mxHexagonShape extends mxBasicShape {

    /**
     *
     */
    public Shape createShape(mxGraphics2DCanvas canvas, mxCellState state) {
        Rectangle temp = state.getRectangle();
        int x = temp.x;
        int y = temp.y;
        int w = temp.width;
        int h = temp.height;
        String direction = mxUtils.getString(state.getStyle(),
                mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_EAST);
        Polygon hexagon = new Polygon();

        if (direction.equals(mxConstants.DIRECTION_NORTH)
                || direction.equals(mxConstants.DIRECTION_SOUTH)) {
            hexagon.addPoint(x + (int) (0.5 * w), y);
            hexagon.addPoint(x + w, y + (int) (0.25 * h));
            hexagon.addPoint(x + w, y + (int) (0.75 * h));
            hexagon.addPoint(x + (int) (0.5 * w), y + h);
            hexagon.addPoint(x, y + (int) (0.75 * h));
            hexagon.addPoint(x, y + (int) (0.25 * h));
        } else {
            hexagon.addPoint(x + (int) (0.25 * w), y);
            hexagon.addPoint(x + (int) (0.75 * w), y);
            hexagon.addPoint(x + w, y + (int) (0.5 * h));
            hexagon.addPoint(x + (int) (0.75 * w), y + h);
            hexagon.addPoint(x + (int) (0.25 * w), y + h);
            hexagon.addPoint(x, y + (int) (0.5 * h));
        }

        return hexagon;
    }

}
